'''
参数：
1）在定义函数时的参数叫形参（形式上的参数），调用函数时的参数叫实参（实际参数）
2）参数的类型
    位置参数：形参和实参的顺序，数据类型，个数需保持一致
    默认参数：形参定义时，定义一个默认值，实参可以不给值，也可以给另外一个值
    可变参数：参数的个数时变化的，0-多个
    字典参数：参数类型是字典
'''
# 设置默认参数
def info(name,age,sex="女"):
    print(f"姓名：{name},年龄：{age},性别：{sex}")
info("tom",34)
info("tom",34,"男")

# python中内置的可变参数 print() max() min()
# print(3)
# print(3,4,"tom")
# print(max(3,4,5,8,12,2))

'''
解包
    通过*,将列表中的元素，作为函数的参数进行解包传递
'''
a = ["tom1",24]
info(*a)

# a1 = [24,"tom1"]
age,name = a
info(name,age)

'''
可变参数 
    形参定义：*参数  **键值参数 实参调用时，就可以给定0-多个实参
    *args 调用时，给定的0-多个参数，会自动打包成一个元组处理
    **keys 调用时，给定的0-多个参数，会自动打包成一个字典处理
    *args,**keys,可以代表所有的参数类型了
'''
def infotest(num,*args,**keys):
    print(f"{num}-->{args}-->{keys}")

def infotest1(*args,**keys):
    pass

infotest(23,"tom","lily",2)
infotest(34,"tom",23,name="tom",age=45)
infotest(34,name="tom",age=45)
infotest1(2,35,7,"rom")

def info1(name,age,height,sex="女",classnum=1):
    print(f"姓名：{name},年龄：{age},性别：{sex},身高：{height},班级：{classnum}")

info1("tom",23,189.7,classnum=2) # 指定给哪个参数
